package ace.module.common.core.impl.manager;

import ace.cmp.data.spring.data.jdbc.querydsl.rsql.core.manager.DtoManager;
import java.io.Serializable;

/**
 * 应用接口.
 *
 * @author Caspar
 */
public interface ApplicationManager<EntityT, IdT, EntityDtoT> extends DtoManager<EntityT, IdT, EntityDtoT> {

  /**
   * 查询应用.
   *
   * @param outId   外键id
   * @param outType 外键类型
   * @return 应用
   */
  EntityT getByOutIdAndOutType(String outId, String outType);

  /**
   * 查询应用,根据outId与outType.
   *
   * @param outId   外键id
   * @param outType 外键类型
   * @return 应用
   */
  EntityT getAndCheckByOutIdAndOutType(String outId, String outType);

  /**
   * 查询应用id,根据outId与outType.
   *
   * @param outId   外键id
   * @param outType 外键类型
   * @return 应用
   */
  <AppIdT extends Serializable> AppIdT getIdByOutIdAndOutType(String outId, String outType);

  /**
   * 查询应用id并检查状态,根据outId与outType.
   *
   * @param outId   外键id
   * @param outType 外键类型
   * @return 应用
   */
  <AppIdT extends Serializable> AppIdT getIdAndCheckByOutIdAndOutType(String outId, String outType);

  /**
   *检查应用不为null,未删除 非锁定.
   * @param entity 应用
   */
  void checkAll(EntityT entity);
}
